package solutions.ferpa.ztest.ent;

import java.sql.*;
import java.util.ArrayList;
import br.com.telescope.adsrt.dom.*;
import br.com.telescope.adsrt.lib.*;
import br.com.telescope.t2.exception.Severity;
import br.com.telescope.util.MailSender;

/**
 * API de persistência de dados da entidade LOGS
 * @author Gerado pelo Telescope
 */
public class EntLogs extends Entity {
    
    public final static String ENTITY_NAME = "RTLOG.LOGS";
    public final static String TABLE_NAME = "LOGS";
    
    // <editor-fold defaultstate="collapsed" desc="Contrutores e inicializacao">
    /**
     * Construtores
     */
    public EntLogs() {
        super();
        initialize();
    }
    
    public EntLogs(BaseRuntime ctx) {
        super();
        initialize(ctx);
    }
    
    @Override
    public String getPrimaryKeyColumn() {
        return "ID";
    }
    
    @Override
    public void initialize(BaseRuntime ctx) {
        super.initialize(ctx);
        initialize();
    }
    
    public void initialize() {
        aId = new DomId(this,"ID", "Id"); 
        aId.setRequired(true);
        oId = new DomId();
        aDataHora = new DomDateTime(this,"DATA_HORA", "Data e hora"); 
        aDataHora.setRequired(true);
        oDataHora = new DomDateTime();
        aEnderecoRemoto = new DomText(this,"ENDERECO_REMOTO", "Endereço"); 
        aEnderecoRemoto.setSize(160);
        oEnderecoRemoto = new DomText();
        aUsuario = new DomLogin(this,"USUARIO", "Usuário"); 
        oUsuario = new DomLogin();
        aUsuarioId = new DomId(this,"USUARIO_ID", "Usuario (ID)"); 
        oUsuarioId = new DomId();
        aDescricao = new DomTextLong(this,"DESCRICAO", "Descrição"); 
        oDescricao = new DomTextLong();
        aTipo = new DomOpcao(this,"TIPO", "Tipo de registro"); 
        oTipo = new DomOpcao();
        aOrigem = new DomUpper(this,"ORIGEM", "Origem"); 
        aOrigem.setSize(160);
        oOrigem = new DomUpper();
        aRegistro = new DomText(this,"REGISTRO", "Registro"); 
        aRegistro.setSize(160);
        oRegistro = new DomText();
        aSessaoId = new DomText(this,"SESSAO_ID", "Sessão"); 
        aSessaoId.setSize(40);
        oSessaoId = new DomText();
        aTempo = new DomInteger(this,"TEMPO", "Tempo"); 
        oTempo = new DomInteger();
        ressetModified();
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="Atributos da entidade">
    
    // Id
    private DomId aId;
    private DomId oId;
    
    // Data e hora
    private DomDateTime aDataHora;
    private DomDateTime oDataHora;
    
    // Endereço
    private DomText aEnderecoRemoto;
    private DomText oEnderecoRemoto;
    
    // Usuário
    private DomLogin aUsuario;
    private DomLogin oUsuario;
    
    // Usuario (ID)
    private DomId aUsuarioId;
    private DomId oUsuarioId;
    
    // Descrição
    private DomTextLong aDescricao;
    private DomTextLong oDescricao;
    
    // Tipo de registro
    private DomOpcao aTipo;
    private DomOpcao oTipo;
    
    // Origem
    private DomUpper aOrigem;
    private DomUpper oOrigem;
    
    // Registro
    private DomText aRegistro;
    private DomText oRegistro;
    
    // Sessão
    private DomText aSessaoId;
    private DomText oSessaoId;
    
    // Tempo
    private DomInteger aTempo;
    private DomInteger oTempo;
    
    // <editor-fold defaultstate="collapsed" desc="Atributo ID">
    
    public EntLogs id(Long value) {
        setId(value);
        return this;
    }
    
    public void setId(DomId value) {
        if (value == null || value.isNull()) {
            nullifyId();
        } else {
            aId.setValue(value.getValue());
            if (aId.isModified()) {
                setModified(true);
            }
        }
    }
    
    public void setId(String value) {
        if (value == null) {
            nullifyId();
        } else {
            aId.setValue(value);
            if (aId.isModified()) {
                setModified(true);
            }
        }
    }
    
    public void setId(Long value) {
        aId.setValue(value);
        if (aId.isModified()) {
            setModified(true);
        }
    }
    
    public void setId(Object value) {
        aId.setValue(value);
        if (aId.isModified()) {
            setModified(true);
        }
    }
    
    public void nullifyId() {
        if (!aId.isNull()) {
            aId.setNull(true);
            setModified(true);
        }
    }
    
    public DomId getId() {
        return aId;
    }
    
    public DomId oldId() {
        return oId;
    }
    
    public Long valueOfId() {
        return aId.getValue();
    }
    
    public boolean isIdModified() {
        return aId.isModified();
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="Atributo DATA_HORA">
    
    public EntLogs dataHora(java.sql.Timestamp value) {
        setDataHora(value);
        return this;
    }
    
    public void setDataHora(DomDateTime value) {
        if (value == null || value.isNull()) {
            nullifyDataHora();
        } else {
            aDataHora.setValue(value.getValue());
            if (aDataHora.isModified()) {
                setModified(true);
            }
        }
    }
    
    public void setDataHora(String value) {
        if (value == null) {
            nullifyDataHora();
        } else {
            aDataHora.setValue(value);
            if (aDataHora.isModified()) {
                setModified(true);
            }
        }
    }
    
    public void setDataHora(java.sql.Timestamp value) {
        aDataHora.setValue(value);
        if (aDataHora.isModified()) {
            setModified(true);
        }
    }
    
    public void setDataHora(Object value) {
        aDataHora.setValue(value);
        if (aDataHora.isModified()) {
            setModified(true);
        }
    }
    
    public void nullifyDataHora() {
        if (!aDataHora.isNull()) {
            aDataHora.setNull(true);
            setModified(true);
        }
    }
    
    public DomDateTime getDataHora() {
        return aDataHora;
    }
    
    public DomDateTime oldDataHora() {
        return oDataHora;
    }
    
    public java.sql.Timestamp valueOfDataHora() {
        return aDataHora.getValue();
    }
    
    public boolean isDataHoraModified() {
        return aDataHora.isModified();
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="Atributo ENDERECO_REMOTO">
    
    public EntLogs enderecoRemoto(String value) {
        setEnderecoRemoto(value);
        return this;
    }
    
    public void setEnderecoRemoto(DomText value) {
        if (value == null || value.isNull()) {
            nullifyEnderecoRemoto();
        } else {
            aEnderecoRemoto.setValue(value.getValue());
            if (aEnderecoRemoto.isModified()) {
                setModified(true);
            }
        }
    }
    
    public void setEnderecoRemoto(String value) {
        if (value == null) {
            nullifyEnderecoRemoto();
        } else {
            aEnderecoRemoto.setValue(value);
            if (aEnderecoRemoto.isModified()) {
                setModified(true);
            }
        }
    }
    
    public void setEnderecoRemoto(Object value) {
        aEnderecoRemoto.setValue(value);
        if (aEnderecoRemoto.isModified()) {
            setModified(true);
        }
    }
    
    public void nullifyEnderecoRemoto() {
        if (!aEnderecoRemoto.isNull()) {
            aEnderecoRemoto.setNull(true);
            setModified(true);
        }
    }
    
    public DomText getEnderecoRemoto() {
        return aEnderecoRemoto;
    }
    
    public DomText oldEnderecoRemoto() {
        return oEnderecoRemoto;
    }
    
    public String valueOfEnderecoRemoto() {
        return aEnderecoRemoto.getValue();
    }
    
    public boolean isEnderecoRemotoModified() {
        return aEnderecoRemoto.isModified();
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="Atributo USUARIO">
    
    public EntLogs usuario(String value) {
        setUsuario(value);
        return this;
    }
    
    public void setUsuario(DomLogin value) {
        if (value == null || value.isNull()) {
            nullifyUsuario();
        } else {
            aUsuario.setValue(value.getValue());
            if (aUsuario.isModified()) {
                setModified(true);
            }
        }
    }
    
    public void setUsuario(String value) {
        if (value == null) {
            nullifyUsuario();
        } else {
            aUsuario.setValue(value);
            if (aUsuario.isModified()) {
                setModified(true);
            }
        }
    }
    
    public void setUsuario(Object value) {
        aUsuario.setValue(value);
        if (aUsuario.isModified()) {
            setModified(true);
        }
    }
    
    public void nullifyUsuario() {
        if (!aUsuario.isNull()) {
            aUsuario.setNull(true);
            setModified(true);
        }
    }
    
    public DomLogin getUsuario() {
        return aUsuario;
    }
    
    public DomLogin oldUsuario() {
        return oUsuario;
    }
    
    public String valueOfUsuario() {
        return aUsuario.getValue();
    }
    
    public boolean isUsuarioModified() {
        return aUsuario.isModified();
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="Atributo USUARIO_ID">
    
    public EntLogs usuarioId(Long value) {
        setUsuarioId(value);
        return this;
    }
    
    public void setUsuarioId(DomId value) {
        if (value == null || value.isNull()) {
            nullifyUsuarioId();
        } else {
            aUsuarioId.setValue(value.getValue());
            if (aUsuarioId.isModified()) {
                setModified(true);
            }
        }
    }
    
    public void setUsuarioId(String value) {
        if (value == null) {
            nullifyUsuarioId();
        } else {
            aUsuarioId.setValue(value);
            if (aUsuarioId.isModified()) {
                setModified(true);
            }
        }
    }
    
    public void setUsuarioId(Long value) {
        aUsuarioId.setValue(value);
        if (aUsuarioId.isModified()) {
            setModified(true);
        }
    }
    
    public void setUsuarioId(Object value) {
        aUsuarioId.setValue(value);
        if (aUsuarioId.isModified()) {
            setModified(true);
        }
    }
    
    public void nullifyUsuarioId() {
        if (!aUsuarioId.isNull()) {
            aUsuarioId.setNull(true);
            setModified(true);
        }
    }
    
    public DomId getUsuarioId() {
        return aUsuarioId;
    }
    
    public DomId oldUsuarioId() {
        return oUsuarioId;
    }
    
    public Long valueOfUsuarioId() {
        return aUsuarioId.getValue();
    }
    
    public boolean isUsuarioIdModified() {
        return aUsuarioId.isModified();
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="Atributo DESCRICAO">
    
    public EntLogs descricao(String value) {
        setDescricao(value);
        return this;
    }
    
    public void setDescricao(DomTextLong value) {
        if (value == null || value.isNull()) {
            nullifyDescricao();
        } else {
            aDescricao.setValue(value.getValue());
            if (aDescricao.isModified()) {
                setModified(true);
            }
        }
    }
    
    public void setDescricao(String value) {
        if (value == null) {
            nullifyDescricao();
        } else {
            aDescricao.setValue(value);
            if (aDescricao.isModified()) {
                setModified(true);
            }
        }
    }
    
    public void setDescricao(Object value) {
        aDescricao.setValue(value);
        if (aDescricao.isModified()) {
            setModified(true);
        }
    }
    
    public void nullifyDescricao() {
        if (!aDescricao.isNull()) {
            aDescricao.setNull(true);
            setModified(true);
        }
    }
    
    public DomTextLong getDescricao() {
        return aDescricao;
    }
    
    public DomTextLong oldDescricao() {
        return oDescricao;
    }
    
    public String valueOfDescricao() {
        return aDescricao.getValue();
    }
    
    public boolean isDescricaoModified() {
        return aDescricao.isModified();
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="Atributo TIPO">
    
    public EntLogs tipo(String value) {
        setTipo(value);
        return this;
    }
    
    public void setTipo(DomOpcao value) {
        if (value == null || value.isNull()) {
            nullifyTipo();
        } else {
            aTipo.setValue(value.getValue());
            if (aTipo.isModified()) {
                setModified(true);
            }
        }
    }
    
    public void setTipo(String value) {
        if (value == null) {
            nullifyTipo();
        } else {
            aTipo.setValue(value);
            if (aTipo.isModified()) {
                setModified(true);
            }
        }
    }
    
    public void setTipo(Object value) {
        aTipo.setValue(value);
        if (aTipo.isModified()) {
            setModified(true);
        }
    }
    
    public void nullifyTipo() {
        if (!aTipo.isNull()) {
            aTipo.setNull(true);
            setModified(true);
        }
    }
    
    public DomOpcao getTipo() {
        return aTipo;
    }
    
    public DomOpcao oldTipo() {
        return oTipo;
    }
    
    public String valueOfTipo() {
        return aTipo.getValue();
    }
    
    public boolean isTipoModified() {
        return aTipo.isModified();
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="Atributo ORIGEM">
    
    public EntLogs origem(String value) {
        setOrigem(value);
        return this;
    }
    
    public void setOrigem(DomUpper value) {
        if (value == null || value.isNull()) {
            nullifyOrigem();
        } else {
            aOrigem.setValue(value.getValue());
            if (aOrigem.isModified()) {
                setModified(true);
            }
        }
    }
    
    public void setOrigem(String value) {
        if (value == null) {
            nullifyOrigem();
        } else {
            aOrigem.setValue(value);
            if (aOrigem.isModified()) {
                setModified(true);
            }
        }
    }
    
    public void setOrigem(Object value) {
        aOrigem.setValue(value);
        if (aOrigem.isModified()) {
            setModified(true);
        }
    }
    
    public void nullifyOrigem() {
        if (!aOrigem.isNull()) {
            aOrigem.setNull(true);
            setModified(true);
        }
    }
    
    public DomUpper getOrigem() {
        return aOrigem;
    }
    
    public DomUpper oldOrigem() {
        return oOrigem;
    }
    
    public String valueOfOrigem() {
        return aOrigem.getValue();
    }
    
    public boolean isOrigemModified() {
        return aOrigem.isModified();
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="Atributo REGISTRO">
    
    public EntLogs registro(String value) {
        setRegistro(value);
        return this;
    }
    
    public void setRegistro(DomText value) {
        if (value == null || value.isNull()) {
            nullifyRegistro();
        } else {
            aRegistro.setValue(value.getValue());
            if (aRegistro.isModified()) {
                setModified(true);
            }
        }
    }
    
    public void setRegistro(String value) {
        if (value == null) {
            nullifyRegistro();
        } else {
            aRegistro.setValue(value);
            if (aRegistro.isModified()) {
                setModified(true);
            }
        }
    }
    
    public void setRegistro(Object value) {
        aRegistro.setValue(value);
        if (aRegistro.isModified()) {
            setModified(true);
        }
    }
    
    public void nullifyRegistro() {
        if (!aRegistro.isNull()) {
            aRegistro.setNull(true);
            setModified(true);
        }
    }
    
    public DomText getRegistro() {
        return aRegistro;
    }
    
    public DomText oldRegistro() {
        return oRegistro;
    }
    
    public String valueOfRegistro() {
        return aRegistro.getValue();
    }
    
    public boolean isRegistroModified() {
        return aRegistro.isModified();
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="Atributo SESSAO_ID">
    
    public EntLogs sessaoId(String value) {
        setSessaoId(value);
        return this;
    }
    
    public void setSessaoId(DomText value) {
        if (value == null || value.isNull()) {
            nullifySessaoId();
        } else {
            aSessaoId.setValue(value.getValue());
            if (aSessaoId.isModified()) {
                setModified(true);
            }
        }
    }
    
    public void setSessaoId(String value) {
        if (value == null) {
            nullifySessaoId();
        } else {
            aSessaoId.setValue(value);
            if (aSessaoId.isModified()) {
                setModified(true);
            }
        }
    }
    
    public void setSessaoId(Object value) {
        aSessaoId.setValue(value);
        if (aSessaoId.isModified()) {
            setModified(true);
        }
    }
    
    public void nullifySessaoId() {
        if (!aSessaoId.isNull()) {
            aSessaoId.setNull(true);
            setModified(true);
        }
    }
    
    public DomText getSessaoId() {
        return aSessaoId;
    }
    
    public DomText oldSessaoId() {
        return oSessaoId;
    }
    
    public String valueOfSessaoId() {
        return aSessaoId.getValue();
    }
    
    public boolean isSessaoIdModified() {
        return aSessaoId.isModified();
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="Atributo TEMPO">
    
    public EntLogs tempo(Integer value) {
        setTempo(value);
        return this;
    }
    
    public void setTempo(DomInteger value) {
        if (value == null || value.isNull()) {
            nullifyTempo();
        } else {
            aTempo.setValue(value.getValue());
            if (aTempo.isModified()) {
                setModified(true);
            }
        }
    }
    
    public void setTempo(String value) {
        if (value == null) {
            nullifyTempo();
        } else {
            aTempo.setValue(value);
            if (aTempo.isModified()) {
                setModified(true);
            }
        }
    }
    
    public void setTempo(Integer value) {
        aTempo.setValue(value);
        if (aTempo.isModified()) {
            setModified(true);
        }
    }
    
    public void setTempo(Object value) {
        aTempo.setValue(value);
        if (aTempo.isModified()) {
            setModified(true);
        }
    }
    
    public void nullifyTempo() {
        if (!aTempo.isNull()) {
            aTempo.setNull(true);
            setModified(true);
        }
    }
    
    public DomInteger getTempo() {
        return aTempo;
    }
    
    public DomInteger oldTempo() {
        return oTempo;
    }
    
    public Integer valueOfTempo() {
        return aTempo.getValue();
    }
    
    public boolean isTempoModified() {
        return aTempo.isModified();
    }
    // </editor-fold>
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="getErrors">
    /**
     * Traduz um erro recebido do banco de dados para um AdsException
     */
    @Override
    public AdsException getErrors(String errorMsg, int transaction) {
        AdsException e;
        String msg = errorMsg.toUpperCase();
        
        if (transaction == DELETE_TRANSACTION) {
            if (msg.indexOf("FK_HISTCAR_LOGS_LOG") >= 0) {
                e = new AdsException("CARTOES.V_HISTORICOS_CARTOES.FK_HISTCAR_LOGS_LOG.RESTRICTED", 
                        Severity.ERROR,
                        "Não pode excluir porque existem Históricos dos cartões fazendo referencia para este registro! (FK_HISTCAR_LOGS_LOG)");
                return e;
            } else {
                e = new AdsException("RTLOG.LOGS.GET_ERRORS_UNKNOWN",
                        AdsException.UNKNOWN,
                        "Erro não esperado: " + errorMsg);
            }
        } else {
            if (msg.indexOf("PK_LOGS") >= 0) {
                e = new AdsException("RTLOG.LOGS.PK_LOGS", 
                        Severity.ERROR,
                        "ID duplicado! (PK_LOGS)");
                return e;
            } else {
                e = new AdsException("RTLOG.LOGS.GET_ERRORS_UNKNOWN",
                        AdsException.UNKNOWN,
                        "Erro não esperado: " + errorMsg);
            }
        }
        return e;
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="Entity Information">
    
    public String getEntityName() {
        return ENTITY_NAME;
    }
    
    public String getTableName() {
        return TABLE_NAME;
    }
    
    public String idSequenceName() {
        return "LOG_SEQUENCE";
    }
    
    private ArrayList<Field> allAttributes;
    public ArrayList<Field> getAllAttributes() {
        if (allAttributes == null) {
            allAttributes = new ArrayList<Field>();
            allAttributes.add(aId);
            allAttributes.add(aDataHora);
            allAttributes.add(aEnderecoRemoto);
            allAttributes.add(aUsuario);
            allAttributes.add(aUsuarioId);
            allAttributes.add(aDescricao);
            allAttributes.add(aTipo);
            allAttributes.add(aOrigem);
            allAttributes.add(aRegistro);
            allAttributes.add(aSessaoId);
            allAttributes.add(aTempo);
        }
        return allAttributes;
    }
    
    /**
     * Retorna o valor da primeira UK da entidade
     * Se ela for composta, retorna a concatenação de toda a combinação
     * de atributos separados por um espaço.
     */
    public String valueOfUk() {
        return "";
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="Relationships">
    
    
    /**
     * Método que copia os valores dos atributos
     * para os valores respectivos old 
     */
    public void saveOldAtributes() {
        oOrigem.setValue(aOrigem);
        oDescricao.setValue(aDescricao);
        oSessaoId.setValue(aSessaoId);
        oUsuarioId.setValue(aUsuarioId);
        oUsuario.setValue(aUsuario);
        oId.setValue(aId);
        oDataHora.setValue(aDataHora);
        oEnderecoRemoto.setValue(aEnderecoRemoto);
        oRegistro.setValue(aRegistro);
        oTipo.setValue(aTipo);
        oTempo.setValue(aTempo);
    }
    
    /**
     * Método que retorna as regras da entidade
     * @return ArrayList com as regras ou null caso não existir nenhuma regra
     */
    public ArrayList getAllRules() {
        ArrayList<EntityRule> out = new ArrayList<EntityRule>();
        {
            AuxiliaryKeyRule rule = new AuxiliaryKeyRule();
            rule.setEntity(EntLogs.class);
            rule.setName("AK_LOGS_DATA");
            rule.addAttribute(new DomDateTime("DATA_HORA",""));
            out.add(rule);
        }
        {
            AuxiliaryKeyRule rule = new AuxiliaryKeyRule();
            rule.setEntity(EntLogs.class);
            rule.setName("AK_LOGS_SESSAO");
            rule.addAttribute(new DomText("SESSAO_ID",""));
            out.add(rule);
        }
        {
            PrimaryKeyRule rule = new PrimaryKeyRule();
            rule.setEntity(EntLogs.class);
            rule.setName("PK_LOGS");
            rule.setPkAttribute(new DomId("ID",""));
            out.add(rule);
        }
        {
            AuxiliaryKeyRule rule = new AuxiliaryKeyRule();
            rule.setEntity(EntLogs.class);
            rule.setName("AK_LOGS_USUARIO");
            rule.addAttribute(new DomLogin("USUARIO",""));
            out.add(rule);
        }
        {
            AuxiliaryKeyRule rule = new AuxiliaryKeyRule();
            rule.setEntity(EntLogs.class);
            rule.setName("AK_LOGS_TIPO");
            rule.addAttribute(new DomOpcao("TIPO",""));
            out.add(rule);
        }
        {
            AuxiliaryKeyRule rule = new AuxiliaryKeyRule();
            rule.setEntity(EntLogs.class);
            rule.setName("AK_LOGS_REGISTRO");
            rule.addAttribute(new DomText("REGISTRO",""));
            out.add(rule);
        }
        {
            AuxiliaryKeyRule rule = new AuxiliaryKeyRule();
            rule.setEntity(EntLogs.class);
            rule.setName("AK_LOGS_JOURNALING");
            rule.addAttribute(new DomUpper("ORIGEM",""));
            rule.addAttribute(new DomText("REGISTRO",""));
            rule.addAttribute(new DomOpcao("TIPO",""));
            out.add(rule);
        }
        return out;
    }
    // </editor-fold>
    
    @Override
    public void fillDefaultValues() throws AdsException {
        if (aId.isNull()) {
            aId.setValue("" + ctx.getNextVal("log_sequence"));
        }
    }
    
    // <editor-fold defaultstate="collapsed" desc="Métodos customizados">
    
    /**
     * Notify.
     * <p>
     * Registra logs de alguns eventos do sistema:
     * <P>
     * - Envio de e-mails.
     * <P>
     */
    public void notify(String evento, Object objeto) throws AdsException {
        // <user-code id="20360316" parentId="20360315" hashcode="-4058cb9c" length="529">
        // import br.com.telescope.util.MailSender;
        String cfg = getConfig("LOG_MAIL", "S").toUpperCase();
        if (!cfg.equals("N")) {
            if (objeto instanceof MailSender && evento.startsWith("RT.SMTP.SEND_MAIL_")) {
                MailSender mailSender = (MailSender) objeto;
                if (mailSender.getException() == null) {
                    if (cfg.equals("S")) {
                        ctx.log("INFO", evento, mailSender.toString());
                    }
                } else {
                    ctx.log("ERR", evento, mailSender.toString());
                }
            }
        }
        
        // </user-code>
    }
}
